package com.git.hui.yinshua.biz.order.dao.mapper;

import com.git.hui.yinshua.api.model.CntDto;
import com.git.hui.yinshua.biz.order.dao.entity.OrderEntity;
import com.git.hui.yinshua.biz.order.dao.entity.OrderItemEntity;
import com.git.hui.yinshua.biz.rest.models.order.req.OrderQueryReq;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author YiHui
 * @date 2024/6/20
 */
public interface OrderMapper {
    /**
     * 保存订单
     *
     * @param order
     * @return
     */
    Integer saveOrder(@Param("order") OrderEntity order);

    /**
     * 保存订单明细
     *
     * @param orderItemList
     * @return
     */
    Integer saveOrderItems(@Param("orderItemList") List<OrderItemEntity> orderItemList);

    /**
     * 删除订单
     * @param id
     * @return
     */
    Integer deleteOrder(@Param("id") Long id);

    /**
     * 更新订单收货地址
     *
     * @param order 订单
     * @return
     */
    Integer updateOrderAddress(OrderEntity order);


    /**
     * 更新订单明细图片
     *
     * @param detailId      订单明细id
     * @param orgImgs 原图
     * @param cutImgs 裁剪图
     * @return 更新数量
     */
    Integer updateOrderItemImgs(@Param("detailId") Integer detailId,@Param("orgImgs") String orgImgs, @Param("cutImgs")String cutImgs);


    Integer updateStatus(@Param("id") Long orderId, @Param("status") Integer status);

    /**
     * 更新支付单状态
     * @param orderId
     * @param status
     * @return
     */
    Integer updatePayStatus(@Param("id") Long orderId, @Param("status") Integer status);


    /**
     * 支付成功，进入待打印流程
     *
     * @param orderId
     * @return
     */
    Integer updatePaySucceed(@Param("id") Long orderId, @Param("orderStatus") Integer orderStatus, @Param("paySucceedTime") Long paySucceedTime);

    /**
     * 退款成功
     * @param orderId
     * @return
     */
    Integer updateRefundSucceed(@Param("id") Long orderId);


    /**
     * 图片已下载，进入待发货流程
     *
     * @param orderId
     * @return
     */
    Integer updateToExpress(@Param("id") Long orderId);

    /**
     * 已发货，进入待收货流程
     *
     * @param orderId
     * @return
     */
    Integer updateToReceive(@Param("id") Long orderId,
                            @Param("trackingCompanyCode") String trackingCompanyCode,
                            @Param("trackingCode") String trackingCode
    );

    /**
     * 对于没有打印的订单，支持更新需要处理的图片
     *
     * @param orderId      订单id
     * @param orderItemId  订单明细id
     * @param uploadImgs   上传的需要处理的图片
     * @param originalImgs 原图
     * @return
     */
    Integer updateImgs(@Param("orderId") Long orderId,
                       @Param("id") Integer orderItemId,
                       @Param("uploadImgs") String uploadImgs,
                       @Param("originalImgs") String originalImgs);


    /**
     * 下载次数 +1
     *
     * @param orderId
     * @return
     */
    Integer updateDownloadCnt(@Param("orderId") Long orderId);

    /**
     * 用户已签收
     *
     * @param orderId
     * @return
     */
    Integer signed(@Param("id") Long orderId);

    /**
     * 查询订单主表 + 详情
     *
     * @param orderId
     * @return
     */
    OrderEntity getDetailById(@Param("orderId") Long orderId);

    /**
     * 查询订单主表
     *
     * @param orderId
     * @return
     */
    OrderEntity getSimpleOrderByIdForUpdate(@Param("orderId") Long orderId);

    /**
     * 订单列表查询
     *
     * @param req
     * @return
     */
    List<OrderEntity> listOrder(OrderQueryReq req);

    int count(OrderQueryReq req);

    List<CntDto> countByStatus(OrderQueryReq req);


    List<Long> queryOverTimeOrders(@Param("time") String time);
}
